iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0
Mobile Development

Android 元件總動員 - 運用與實踐元件指南系列 第 9

元件篇-自定義Button與ImageView應用 Day9

  • 分享至 

  • xImage
  •  

開頭先祝大家中秋節快樂!(。・∀・)ノ゙
接著來製作能使Button點擊前後不同樣式的方法吧~


自定義Button與程式碼

  • 新增Drawable Resource File,並取名
    https://ithelp.ithome.com.tw/upload/images/20240917/20168454zckarlmQu2.png

  • 未點擊時Button狀態
    https://ithelp.ithome.com.tw/upload/images/20240917/20168454NFklZY0QOV.png

右邊會是未點擊時Button狀態的樣式預覽狀態

  • 我們為了讓Button
    android:state_pressed => 是否有點擊按鈕,false為未點擊情況,true為點擊

  • 點擊後Button狀態

https://ithelp.ithome.com.tw/upload/images/20240917/20168454pByPxW8Qsh.png

上一篇已經有介紹過各個程式碼的說明,不曉得的人可以翻上一篇,這裡就不再贅述了~

.xml完整程式碼

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- 尚未點擊時 -->
    <item android:state_pressed="false">
        <shape android:shape="rectangle" >
            <solid
                android:color="#123456" />
            <corners
                android:radius="20dp" />
            <stroke
                android:width="1dip"
                android:color="#071E54" />
            <gradient
                android:angle="-90"
                android:startColor="#3AC5CC"
                android:endColor="#4A71E5"  />
        </shape>
    </item>

    <!-- 點擊狀態 -->
    <item
        android:state_pressed="true">
        <shape
            android:shape="rectangle">
            <corners
                android:radius="10dip" />
            <stroke
                android:width="3dp"
                android:color="#772887" />
            <gradient
                android:angle="90"
                android:startColor="#7F73AE"
                android:endColor="#C157C4"  />
        </shape>
    </item>

</selector>
  • background和backgroundTint設定完,這樣就完成了~
    https://ithelp.ithome.com.tw/upload/images/20240917/20168454KAwEsLAOVy.png
<Button
        android:id="@+id/main_myButton_btn"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:text="Button"
        android:background="@drawable/my_button_pro"
        app:backgroundTint="@null"
        app:layout_constraintBottom_toTopOf="@+id/guideline2"
        app:layout_constraintEnd_toStartOf="@+id/guideline4"
        app:layout_constraintStart_toStartOf="@+id/guideline3"
        app:layout_constraintTop_toTopOf="@+id/guideline" />

ImageView

  • 拖移一個ImageView到牌色區域
    https://ithelp.ithome.com.tw/upload/images/20240917/20168454SBP4BiRd7E.png

  • 這裡就是可以讓ImageView顯示喜歡圖片的地方
    https://ithelp.ithome.com.tw/upload/images/20240917/20168454gE19csUiqg.png

  • 點擊左上方 + 圖示,再點選Import Drawables 就可以選擇自己想要顯示的圖片啦
    https://ithelp.ithome.com.tw/upload/images/20240917/20168454uW7eA1BqkI.png

  • 選擇好之後,點選Next
    https://ithelp.ithome.com.tw/upload/images/20240917/20168454WZTL4rWfPF.png

  • 點擊 Import
    https://ithelp.ithome.com.tw/upload/images/20240917/20168454sExR573U0u.png

  • 這樣它就會出現在左側,如果找不到可以用上方進行搜尋
    https://ithelp.ithome.com.tw/upload/images/20240917/20168454Vx56x77yRL.png

  • 點擊OK後,圖片就出來了,接著放在自己喜歡的位置進行困定
    https://ithelp.ithome.com.tw/upload/images/20240917/20168454a7ONdNJGzH.png

  • 如果想換張圖可以使用右鍵點擊ImageView,點選Set Sample Data
    https://ithelp.ithome.com.tw/upload/images/20240917/20168454ZWOY8bw65a.png

  • 就可以再次進入Pick a Drawable
    https://ithelp.ithome.com.tw/upload/images/20240917/20168454QJPgCi06Ke.png

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.6" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.7" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.2" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.8" />

    <Button
        android:id="@+id/main_myButton_btn"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@drawable/my_button_pro"
        android:text="Button"
        app:backgroundTint="@null"
        app:layout_constraintBottom_toTopOf="@+id/guideline2"
        app:layout_constraintEnd_toStartOf="@+id/guideline4"
        app:layout_constraintStart_toStartOf="@+id/guideline3"
        app:layout_constraintTop_toTopOf="@+id/guideline" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.5" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.1" />

    <ImageView
        android:id="@+id/mian_myImage_iv"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toTopOf="@+id/guideline5"
        app:layout_constraintEnd_toStartOf="@+id/guideline4"
        app:layout_constraintStart_toStartOf="@+id/guideline3"
        app:layout_constraintTop_toTopOf="@+id/guideline6"
        android:src="@drawable/img_" />

</androidx.constraintlayout.widget.ConstraintLayout>

Button與ImageView應用

按下按鈕後變換圖片,因此需要監聽器去進行動作
https://ithelp.ithome.com.tw/upload/images/20240917/20168454TUVy9hqMaW.png

  • 未點擊按鈕
    https://ithelp.ithome.com.tw/upload/images/20240917/201684544d35bho5Rj.png

  • 點擊按鈕(未放開手)
    https://ithelp.ithome.com.tw/upload/images/20240917/20168454fJZnzn8cjM.png

  • 點擊按鈕(放開手)
    https://ithelp.ithome.com.tw/upload/images/20240917/20168454bRQDxwbSfg.png

package com.example.ittext;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

public class MainActivity extends AppCompatActivity {
    //宣告
    private Button myButton;
    private ImageView myImageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);

        //綁定
        myButton = findViewById(R.id.main_myButton_btn);
        myImageView = findViewById(R.id.mian_myImage_iv);

        //點擊事件(監聽器)
        myButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                myImageView.setImageResource(R.drawable.memedog);
            }
        });

    }
}

上一篇
元件篇-自定義Button Day8
下一篇
元件篇-EditText Day10
系列文
Android 元件總動員 - 運用與實踐元件指南30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言